package com.tutos.ui.monitor;

import java.util.ArrayList;
import java.util.Date;

import javax.inject.Inject;

import com.tutos.dao.EstudianteDAO;
import com.tutos.dao.MensajeDAO;
import com.tutos.dao.MonitorDAO;
import com.tutos.model.Estudiante;
import com.tutos.model.Mensaje;
import com.tutos.model.Monitor;
import com.vaadin.ui.Alignment;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.GridLayout;
import com.vaadin.ui.Label;
import com.vaadin.ui.RichTextArea;
import com.vaadin.ui.TextField;
import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Button.ClickEvent;

public class MensajeComponenteMonitor extends CustomComponent {

	// Componentes gráficos
	private VerticalLayout mainLayout;
	private Button btnEnviar;
	private RichTextArea richTextAreaMensaje;
	private GridLayout gridLayout;
	private TextField txtAsunto;
	private Label lblAsunto;
	private TextField txtDestinatario;
	private Label lblDestinatario;
	private ArrayList<String> correosSeleccionados;
	
//	private Monitor monitorDestinatario;
//	private Estudiante estudianteActual;
	
	private Estudiante estudianteDestinatario;
	private Monitor monitorActual;
	
	// DAOs necesarios
	private EstudianteDAO est;
	private MonitorDAO mon;
	private MensajeDAO mensajeDAO;

	@Inject
	public MensajeComponenteMonitor(EstudianteDAO est, MonitorDAO mon,
			MensajeDAO mensajeDAO, ArrayList<String> correosSeleccionados, Monitor monitorActual) {

		this.est = est;
		this.mon = mon;
		this.mensajeDAO = mensajeDAO;
		this.correosSeleccionados = correosSeleccionados;
		this.monitorActual = monitorActual;

		buildMainLayout();
		setCompositionRoot(mainLayout);
		setDestinatarios();
	}

	private void setDestinatarios() {

		String destinatariosDelMensaje = "";
		txtDestinatario.setEnabled(false);

		for (int i = 0; i < correosSeleccionados.size(); i++) {
			
			
			if (i == correosSeleccionados.size() - 1) {
				destinatariosDelMensaje += correosSeleccionados.get(i) + ".";
				break;
			}
			destinatariosDelMensaje += correosSeleccionados.get(i) + ", ";
			System.out.println("String: " + destinatariosDelMensaje);
		}

		txtDestinatario.setValue(destinatariosDelMensaje);

	}

	private void enviar() {
		
		Mensaje mensajeNuevo = new Mensaje();
		mensajeNuevo.setFechaEnviado(new Date());
		mensajeNuevo.setAsunto((String)txtAsunto.getValue());
		mensajeNuevo.setContenido((String)richTextAreaMensaje.getValue());
		mensajeNuevo.setEmisor(monitorActual);
		
		
		// Enviar mensaje a los estudiantes seleccionados previamente
		for (int i = 0; i < correosSeleccionados.size(); i++) {
			// Estudiantes a los que se les envía el mensaje
			estudianteDestinatario = est.getEstudianteByCorreo(correosSeleccionados.get(i));
			mensajeNuevo.setReceptor(estudianteDestinatario);
			mensajeNuevo.setId(null);
			mensajeDAO.insertEntity(mensajeNuevo);			

		}
		
		// Mensaje de éxito en el envío del mensaje
		getApplication().getMainWindow().showNotification("Mensaje enviado exitosamente");
		// Cerrar la ventana actual
		getApplication().getMainWindow().removeWindow(getWindow());
	}

	private VerticalLayout buildMainLayout() {
		// common part: create layout
		mainLayout = new VerticalLayout();
		mainLayout.setImmediate(false);
		mainLayout.setWidth("540px");
		mainLayout.setHeight("540px");
		mainLayout.setMargin(false);

		// top-level component properties
		setWidth("540px");
		setHeight("540px");

		// gridLayout
		gridLayout = buildGridLayout();
		mainLayout.addComponent(gridLayout);

		// richTextAreaMensaje
		richTextAreaMensaje = new RichTextArea();
		richTextAreaMensaje.setImmediate(false);
		richTextAreaMensaje.setWidth("100.0%");
		richTextAreaMensaje.setHeight("100.0%");
		mainLayout.addComponent(richTextAreaMensaje);
		mainLayout.setExpandRatio(richTextAreaMensaje, 1.0f);

		// btnEnviar
		btnEnviar = new Button();
		btnEnviar.setCaption("Enviar Mensaje");
		btnEnviar.setImmediate(true);
		btnEnviar.setWidth("-1px");
		btnEnviar.setHeight("-1px");

		btnEnviar.addListener(new ClickListener() {

			@Override
			public void buttonClick(ClickEvent event) {
				enviar();

			}
		});

		mainLayout.addComponent(btnEnviar);
		mainLayout.setComponentAlignment(btnEnviar, new Alignment(34));

		return mainLayout;
	}

	private GridLayout buildGridLayout() {
		// common part: create layout
		gridLayout = new GridLayout();
		gridLayout.setImmediate(false);
		// gridLayout.setWidth("100.0%");
		gridLayout.setWidth("-1px");
		gridLayout.setHeight("-1px");
		gridLayout.setMargin(false);
		gridLayout.setColumns(2);
		gridLayout.setRows(2);

		// lblDestinatario
		lblDestinatario = new Label();
		lblDestinatario.setImmediate(false);
		lblDestinatario.setWidth("-1px");
		lblDestinatario.setHeight("-1px");
		lblDestinatario.setValue("Para:");
		gridLayout.addComponent(lblDestinatario, 0, 0);
		gridLayout.setComponentAlignment(lblDestinatario, new Alignment(34));

		// txtDestinatario
		txtDestinatario = new TextField();
		txtDestinatario.setImmediate(false);
		txtDestinatario.setWidth("499px");
		txtDestinatario.setHeight("-1px");
		gridLayout.addComponent(txtDestinatario, 1, 0);

		// lblAsunto
		lblAsunto = new Label();
		lblAsunto.setImmediate(false);
		lblAsunto.setWidth("-1px");
		lblAsunto.setHeight("-1px");
		lblAsunto.setValue("Asunto:");
		gridLayout.addComponent(lblAsunto, 0, 1);
		gridLayout.setComponentAlignment(lblAsunto, new Alignment(34));

		// txtAsunto
		txtAsunto = new TextField();
		txtAsunto.setImmediate(false);
		txtAsunto.setWidth("100.0%");
		txtAsunto.setHeight("-1px");
		gridLayout.addComponent(txtAsunto, 1, 1);

		return gridLayout;
	}

}
